/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.seguranca.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.seguranca.vo.AcessoVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * Data Access Object - Acesso
 * Camada de acesso ao banco de dados da entidade Acesso.
 *
 * @author Bruno Schifer Bernardi
 */
public class AcessoDAO extends BaseDAO<AcessoVO> {

    @Override
    public void inserir(AcessoVO entidade) {
        ConstrutorSQL sql = new ConstrutorSQL();
        
        sql.append("INSERT INTO TB_ACESSO(CD_GRUPO, CD_MODULO)");
        sql.append("VALUES (?, ?)");
        
        List<?> parametros = criarParametros(entidade.getCdGrupo(), entidade.getCdModulo());
        
        Integer idGerado = ((Long) executarInsercao(sql.toString(), parametros)).intValue();

        entidade.setIdAcesso(idGerado);
    }
    
    @Override
    public void alterar(AcessoVO entidade) {
        ConstrutorSQL sql = new ConstrutorSQL();
        
        sql.append("UPDATE TB_ACESSO SET CD_GRUPO = ?, CD_MODULO = ?");
        sql.append("WHERE ID_ACESSO = ?");
        
        executarAlteracao(sql.toString(), criarParametros(entidade.getCdGrupo(), entidade.getCdModulo(), entidade.getIdAcesso()));
    }
    
    @Override
    public void excluir(AcessoVO entidade) {
        ConstrutorSQL sql = new ConstrutorSQL();
        
        sql.append("DELETE FROM TB_ACESSO");
        sql.append("WHERE ID_ACESSO = ?");
        
        executarAlteracao(sql.toString(), criarParametros(entidade.getIdAcesso()));
    }
    
    @Override
    public AcessoVO consultarPorId(Serializable id) {
        ConstrutorSQL sql = new ConstrutorSQL();
                
        sql.append("SELECT * FROM TB_ACESSO WHERE ID_ACESSO = ?");

        return consultarUm(sql.toString(), criarParametros(id));
    }
    
    @Override
    public List<AcessoVO> consultarPorExemplo(AcessoVO exemplo) {

        List<AcessoVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_ACESSO T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

    @Override
    protected AcessoVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        AcessoVO acesso = new AcessoVO();
        acesso.setIdAcesso(rs.getInt("ID_ACESSO"));
        acesso.setCdGrupo(new Integer(rs.getInt("CD_GRUPO")));
        acesso.setCdModulo(new Integer(rs.getInt("CD_MODULO")));

        return acesso;
    }
    
    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, AcessoVO exemplo) {

        if (exemplo.getCdGrupo() != null) {
            query.append("AND T.CD_GRUPO = ?");
            adicionarParametro(exemplo.getCdGrupo());
        }

        if (exemplo.getCdModulo() != null) {
            query.append("AND T.CD_MODULO = ?");
            adicionarParametro(exemplo.getCdModulo());
        }
    }
}
